Kinesis Data Analyticsを使ったストリーム分析のワークショップをやってみた
Kinesis Data AnalyticsではApache Flinkを使ったストリームデータに対するリアルタイム処理が可能です。 Kinesis Data Analyticsでは以下のブログで紹介されているようなSQLアプリケーションを使ったリアルタイム分析が可能です。
それだけではなく、Kinesis Data AnalyticsではApache FlinkベースのJavaアプリケーションでのリアルタイム分析も可能です。
という訳で、今回はKinesis Data AnalyticsのJavaアプリケーションの開発の流れを知ることができる、Streaming Analytics Workshopについて紹介します。全部英語ですが、Google翻訳でページ全体を翻訳してしまえば、日本語で読めます!
ストリームデータ分析を試すには、リアルタイム処理を行うJavaアプリケーションの開発だけでなく、大量のイベントデータの作成や集計したデータの可視化用ダッシュボードなどなど周辺システム(環境)の準備も必要なため、かなり大変です。今回紹介するワークショップでは、イベントの送信用アプリケーションや集計後データの保存用のElsticSearchのドメイン、可視化用ダッシュボード(Kibana)などは事前に準備されているため、リアルタイム処理を行うJavaアプリケーションの開発フローの体験に集中できます。
概要
毎秒12MBものニューヨーク市のタクシーの乗降イベントデータをリアルタイムで処理&可視化するという内容です。
アーキテクチャは次のような感じです。 クライアントから送信されたイベントデータをKinesis Data Streamsで蓄積し、Kinesis Data Analyticsで順次データを処理し、Elasticsearchに流し、Kibanaで可視化します。
可視化は次のようなKibanaのダッシュボードで行います。
内容
ワークショップの内容について各章ごとにざっくり紹介します。 ちなみに、各種リソースの作成や確認はマネジメントコンソールで行い、Javaアプリケーションの開発等はWindows on EC2にインストールされたIntelliJ IDEAをリモートデスクトップで操作します。
準備
- 作業用EC2やElasticsearchなどのリソースをCloudFormationでデプロイ
- 作業用EC2にリモートデスクトップでアクセス
- IntelliJ IDEAを使って、ワークショップで使用するGitリポジトリを開く
イベントデータの送信と取り込み
- マネジメントコンソールからKinesis Data Streamsを作成
- JavaアプリケーションAmazon Kinesis Replayを使ってイベントデータをKinesis Data Streamsに流す
Flinkアプリケーションのローカル開発
- IntelliJ IDEAでのFlinkアプリケーションの実行とデバッグ
- 流れてきたイベントデータを表示するだけのアプリケーションProcessTaxiStreamLocalを使用する
Flinkアプリケーションの拡張
- Kinesis Data Analyticsランタイムからのパラメーターを読み込み
- 処理基準となる時間をイベント時間に設定
- 2種類の集計処理を追加
- Elasticsearch Sinkを追加
Kibanaを使った可視化
- Elasticsearchインデックスを作成
- 作成済みのKibanaのダッシュボード定義ファイル(JSON)をインポートする
- Elasticsearchにデータを流して、可視化内容を確認する
- Flinkアプリケーションの実行時パラメーターにElasticsearchのエンドポイントを指定する
- Flinkアプリケーションを実行する
FlinkアプリケーションをKinesis Data Analyticsにデプロイ
- すべての依存関係を含んだUber Jarを作成
- マネジメントコンソールからKinesis Data Analyticsアプリケーションを作成設定&起動
CloudWatchを使った監視とKinesisのスケーリング
- Kinesis Data Streamsのシャード数を追加
- CloudWatch Dashboardsで監視用ダッシュボードを作成
- Kinesis Data Analyticsアプリケーションがスケーリングする様子の確認
リソースの削除
ワークショップ後に不要な費用がかからないように、作成した各種リソースを削除します。
ワークショップ試す際の参考費用
ワークショップでは色々なAWSサービスを利用するため、それぞれで費用が発生します。ワークショップにかかる時間を3時間とすると、およそ以下に示すような費用がかかります。 他にも費用が発生する要素はありますが、今回は主なものだけピックアップしています。
- Kinesis Data Streams(シャード): 0.0195USD/シャード・時間 * 8シャード * 3時間 = 0.468USD
- Kinesis Data Analytics(KPU): 0.142USD/KPU・時間 * 3時間 = 0.426USD
- Elasticsearch Service(t2.medium.elasticsearch): 0.112USD/時間 * 3時間 = 0.336USD
- Windows on EC2(m5.2xlarge): 0.864USD/時間 * 3時間 = 2.592USD
- CloudWatch Dashboard: 3USD/ダッシュボード・月 = 3USD
安くはない費用が発生するため、リソースの削除し忘れには注意しましょう!
さいごに
Streaming Analytics Workshopについて紹介しました。色々お膳立てされているので、手順に従うだけでFlinkアプリケーション開発からイベントデータのニアリアルタイムでの可視化まで雰囲気を味わうことができます。今回このワークショップを試してみて、Kinesis Data AnalyticsやFlinkは色々なものに活用できそうで興味が湧きました。また何か試してみたいと思います。